//
// Created by kero-ly on 2020/6/13.
//

#include "ly_sort.h"

vector<int> LySort::selectSort(vector<int>& v) {
    // 1. 适当的输入检查
    if (v.size() <= 1)
        return v;

    // 2. 两层循环，i循环代表需要排i个元素，j循环代表第i个元素需要比较j次
    vector<int> out = v;
    for (int i = 0; i < out.size(); ++i) {
        // 3. 定义一个变量vec_min_idx，记录第i次排列时的所需要的最小元素位置
        int vec_min_idx = i;
        for (int j = i+1; j < out.size(); ++j) {
            // 4. 通过j循环寻找当前最小元素的位置，更新到vec_min_idx
            if (out[j] < out[vec_min_idx]) {
                vec_min_idx = j;
            }
        }
        // 5. 将第i次找到的最小值，放在第i个位置vec[i] = vec[vec_min_idx]
        if (i != vec_min_idx)
            std::swap(out[vec_min_idx], out[i]);
    }
    return out;
}